package com.singfan.common;

import java.util.HashMap;
import java.util.Map;

/**
 * 创建单实例对象的工厂
 * Author: HanSongHe
 * Date: 2015-07-27 11:27
 * Desc: 所有业务上要使用的单例对象都应该由此工厂生成，以便以后替换实现或者添加切面。
 */
public class SingletonFactory {
    private static Map<String, Object> singletonMap = new HashMap<>();

    /**
     * 获取实例
     * @param tClass 类型信息
     * @param <T> 类型
     * @return 实例
     */
    public synchronized static <T> T getInstance(Class<T> tClass){
        try{
            String logicKey = tClass.getName();
            T t;
            if(!singletonMap.containsKey(logicKey)){
                t = tClass.newInstance();
                singletonMap.put(logicKey, t);
            }
            else{
                t = (T)singletonMap.get(logicKey);
            }
            return t;
        }
        catch (Exception ex){
            throw new SingFanException(String.format("SingletonFactory.getInstance() error:%s !", ex.getMessage()), ex);
        }
    }
}
